Security News
Weekly Downloads Now Available in npm Package Search Results
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.
@metamask/eth-simple-keyring
Advanced tools
A simple standard interface for a series of Ethereum private keys.
A simple JS class wrapped around ethereumjs-wallet designed to expose an interface common to many different signing strategies to be used in a KeyringController
; such as the one used in MetaMask
One of the goals of this class is to allow developers to easily add new signing strategies to MetaMask. We call these signing strategies Keyrings, because they can manage multiple keys.
A class property that returns a unique string describing the Keyring. This is the only class property or method, the remaining methods are instance methods.
As a Javascript class, your Keyring object will be used to instantiate new Keyring instances using the new keyword. For example:
const keyring = new YourKeyringClass(options);
The constructor currently receives an options object that will be defined by your keyring-building UI, once the user has gone through the steps required for you to fully instantiate a new keyring. For example, choosing a pattern for a vanity account, or entering a seed phrase.
We haven't defined the protocol for this account-generating UI yet, so for now please ensure your Keyring behaves nicely when not passed any options object.
All below instance methods must return Promises to allow asynchronous resolution.
In this method, you must return any JSON-serializable JavaScript object that you like. It will be encoded to a string, encrypted with the user's password, and stored to disk. This is the same object you will receive in the deserialize() method, so it should capture all the information you need to restore the Keyring's state.
As discussed above, the deserialize() method will be passed the JavaScript object that you returned when the serialize() method was called.
The addAccounts(n) method is used to inform your keyring that the user wishes to create a new account. You should perform whatever internal steps are needed so that a call to serialize() will persist the new account, and then return an array of the new account addresses.
The method may be called with or without an argument, specifying the number of accounts to create. You should generally default to 1 per call.
When this method is called, you must return an array of hex-string addresses for the accounts that your Keyring is able to sign for.
This method will receive a hex-prefixed, all-lowercase address string for the account you should sign the incoming transaction with.
For your convenience, the transaction is an instance of ethereumjs-tx, (https://github.com/ethereumjs/ethereumjs-tx) so signing can be as simple as:
transaction.sign(privateKey)
You must return a valid signed ethereumjs-tx (https://github.com/ethereumjs/ethereumjs-tx) object when complete, it can be the same transaction you received.
The eth_sign
method will receive the incoming data, already hashed, and must sign that hash, and then return the raw signed hash.
This provides the public key for encryption function.
The eth_decryptMessage
method will receive the incoming data in array format that returns encrypt
function in eth-sig-util
and must decrypt message, and then return the raw message.
Exports the specified account as a private key hex string.
removes the specified account from the list of accounts.
nvm use
will automatically choose the right node version for you.yarn install
to install dependencies and run any required post-install scripts-- This package implicitly relies on Buffer to be present (meaning that if someone wants to use this in a browser context, they need to supply a polyfill for Buffer or use the buffer
package)
Run yarn test
to run the tests once. To run tests on file changes, run yarn test:watch
.
Run yarn lint
to run the linter, or run yarn lint:fix
to run the linter and fix any automatically fixable issues.
The project follows the same release process as the other libraries in the MetaMask organization. The GitHub Actions action-create-release-pr
and action-publish-release
are used to automate the release process; see those repositories for more information about how they work.
Choose a release version.
If this release is backporting changes onto a previous release, then ensure there is a major version branch for that version (e.g. 1.x
for a v1
backport release).
v1.0.2
release, you'd want to ensure there was a 1.x
branch that was set to the v1.0.1
tag.Trigger the workflow_dispatch
event manually for the Create Release Pull Request
action to create the release PR.
action-create-release-pr
workflow to create the release PR.Update the changelog to move each change entry into the appropriate change category (See here for the full list of change categories, and the correct ordering), and edit them to be more easily understood by users of the package.
yarn auto-changelog validate --rc
to check that the changelog is correctly formatted.Review and QA the release.
Squash & Merge the release.
action-publish-release
workflow to tag the final release commit and publish the release on GitHub.Publish the release on npm.
npm publish --dry-run
to examine the release contents to ensure the correct files are included. Compare to previous releases if necessary (e.g. using https://unpkg.com/browse/[package name]@[package version]/
).npm publish
.FAQs
A simple standard interface for a series of Ethereum private keys.
We found that @metamask/eth-simple-keyring demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 10 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.
Security News
A Stanford study reveals 9.5% of engineers contribute almost nothing, costing tech $90B annually, with remote work fueling the rise of "ghost engineers."
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.